package com.shujia.day01;

public class Demo05ChangeCode {
    public static void main(String[] args) {
        /*
            TODO 原码 反码 补码之间的转换
              数据在内存中进行计算时都是以二进制形式存在的  =>
                 10进制数  4 + 5 =？
                 4:  100
                 5:  101
              数据在计算时也需要使用符号，所以需要将基本的二进制数据表示为原码形式

            TODO  原码：就是二进制定点表示法，即最高位为符号位，“0”表示正，“1”表示负，其余位表示数值的大小。
                 4:  0 0000100
                 5:  0 0000101
            如果现在直接对其进行计算，定义计算规则为 对应位置相加 (看似正确，错误)
                 9:  0 0001001
            TODO 但此时如果数据是 1+(-1) => 0
                 1: 0 0000001
                -1: 1 0000001
            现在如果直接对其进行计算，定义计算规则为 对应位置相加 (错误)
                   1 0000010 =/> 0

            TODO 反码：正数的反码与其原码相同；负数的反码是对其原码逐位取反，但符号位除外
              计算反码：
                  1: 0 0000001
                 -1: 1 1111110
            TODO 补码：正数的补码与其原码相同；负数的补码是在其反码的末位加1
              计算补码：
                 1: 0 0000001
                -1: 1 1111111

            TODO 进行加法计算
                 1: 0 0000001
                 +
                -1: 1 1111111
                =   0 0000000 (补码结果)
                由于数据最高位置为0表示正数 => 补码 = 反码 = 原码 => 转成10进制最终得到 为 0

         */
    }
}
